使用 new 来创建动态数组

通常对于大型数据(如数组、字符串和结构)应使用new。

在创建数组时,指定长度;在编译时给数组分配内存被称为静态联编。(不管用不用,都会占用内存)

使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在程序运行时选择数组的长度。这被称为动态联编。意味着数组是在程序运行时创建的。这种数组叫做动态数组。在运行时确定数组的长度。

    int* p = new int[10]; // new运算符返回第一个元素的地址。
    delete [] p;          // 释放整个数组,new如果带[] 则delete也需要带[]

使用new和delete时,应遵守以下规则

● 不要使用delete来释放不是new分配的内存
● 不是使用delete释放同一个内存块两次
● 如果使用new[]为数组分配内存,则应使用delete[]来释放。
● 如果使用new[]为一个实体分配内存,则应使用delete(没有方括号)来释放。
● 对空指针应用delete是安全的

使用动态数组

把指针当作数组名使用

    int main()
    {
        using namespace std;
        int* p = new int[3]; // new运算符返回第一个元素的地址。
        p[0] = 10;
        p[1] = 9;
        p[2] = 8;
        for (int i = 0; i < 3; i++) {
            cout << p[i] << endl;
        }

        *p = 20;
        *(p+1) = 19;
        *(p+2) = 18;
        for (int i = 0; i < 3; i++) {
            cout << p[i] << endl;
        }

        *p = 30;
        *(++p) = 29;
        *(++p) = 28;
        p-=2;  // 需要提供delete正确的地址
        for (int i = 0; i < 3; i++) {
            cout << p[i] << endl;
        }

        delete [] p;          // 释放整个数组,new如果带[] 则delete也需要带[]
        return 0;
    }

🔚